﻿#pragma once

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>

// 该代码实现的为小根堆

typedef int DataType;

typedef struct Heap 
{
	DataType* _a;
	size_t _size;
	size_t _capacity;
}Heap;

// 堆-工具函数
// 数据交换
void Swap(DataType* arr, int x, int y);
// 容量检查 / 扩容操作
void CheckCapacity(Heap* heap);
// 向下调整
void AdjustDown(DataType* arr, int n, int parent);
// 向上调整
void AdjustUp(DataType* arr, int child);
// 小堆判断函数 - 是则返回1 不是返回0
int SmallHeapCheck(DataType* arr, int parent, int n);

// 堆-基本操作函数
// 堆-初始化
void HeapInit(Heap* heap, DataType* arr, int n);
// 堆-销毁
void HeapDestory(Heap* heap);
// 堆-插入堆中
void HeapPush(Heap* heap, DataType elem);
// 堆-删除堆顶
void HeapPop(Heap* heap);
// 堆-获取堆顶元素
DataType HeapTop(Heap* heap);
// 堆-有效数据个数
size_t HeapSize(Heap* heap);
// 堆-判空 为空返回非0 非空返回0
int HeapEmpty(Heap* heap);